package com.cib.xagcjs.dto;

import com.cib.xagcjs.vo.PayContent;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
 * 支付结果回传信息实体
 */
@Data
public class PaymentResult {
    // 所属银行
    private String bank;

    // 机构ID
    private String instId;

    // 操作类型
    private String optype;

    // 支付结果内容
    private PaymentResultDto content;

    // 支付结果内容DTO
    @Data
    public static class PaymentResultDto {
        // 付款指令的唯一识别号
        private String payInstrucId;

        // 入账状态，1－入账成功 2－入账失败
        private String accStatus;

        // 入账账户账号
        private String accNo;

        // 入账金额，单位：元（精确到两位小数）
        private String amount;

        // 入账日期，格式为yyyy-MM-dd
        private String accDate;

        // 入账时间，格式为hh:mm:ss
        private String accTime;

        // 失败原因
        private String errorReason;
    }


    /**
     * 组装支付结果回传所需细表
     * @param payContent 支付结果细表类
     * @return 支付结果细表信息
     */
    public static PaymentResult.PaymentResultDto getPaymentResultDto(PayContent payContent) {
        PaymentResult.PaymentResultDto dto = new PaymentResult.PaymentResultDto();
        dto.setPayInstrucId(payContent.getPayInstrucId()); // 指令ID
        dto.setAccNo(payContent.getAccNo()); // 入账账户账号
        dto.setAccStatus(payContent.getAccStatus().toString()); // 入账状态
        dto.setAmount(payContent.getAmount().toString()); // 入账金额
        dto.setAccDate(payContent.getAccDate()); // 入账日期
        dto.setAccTime(payContent.getAccTime()); // 入账时间
        if (payContent.getAccStatus() == 2) {
            dto.setErrorReason("入账失败"); // 错误原因
        } else {
            dto.setErrorReason(""); // 入账成功则为空
        }
        return dto;
    }
}
